/*
二维数组的元素连续存储，按行优先存。基于此可以实现用一级指针遍历二维数组。

验证二维数组存储的连续性：
0x7fff8bff65e0 0x7fff8bff65e4 0x7fff8bff65e8 0x7fff8bff65ec 
0x7fff8bff65f0 0x7fff8bff65f4 0x7fff8bff65f8 0x7fff8bff65fc 
0x7fff8bff6600 0x7fff8bff6604 0x7fff8bff6608 0x7fff8bff660c 
基于一级指针遍历二维数组：
1 1
2 2
3 3
4 4
4 4
5 5
6 6
8 8
2 2
9 9
3 3
5 5
 */
#include<stdio.h>
int main(){
	int a[3][4] = {{1,2,3,4},{4,5,6,8},{2,9,3,5}};
	int n = sizeof(a) / sizeof(a[0]);
	int m = sizeof(a[0]) / sizeof(int);
	int *p = NULL;

	printf("验证二维数组存储的连续性：\n");
	for(int i = 0 ; i < n ; i++){
		for(int j = 0 ; j < m ;j++){
			printf("%p ",&a[i][j]);
		}
		printf("\n");
	}

	printf("基于一级指针遍历二维数组：\n");

	p = a[0];
	for(int i = 0 ; i < n*m ; i++){
		printf("%d %d\n",*(p+i),p[i]);
	}
}
